--- id: TASK-004 title: Editor rebuilds full visual model twice per keystroke (O(document)) status: "\U0001F7E6 Backlog" assignee: [] created_date: '2026-06-28 18:38' labels: - perf dependencies: [] priority: low ordinal: 4000 --- ## Description Every InsertRune→followCursor→buildVisual rescans+rewraps all lines; MoveUp/MoveDown call buildVisual then followCursor calls it again (2 full scans/vertical keystroke). Fine for notes, costly for long docs in the writing canvas. Fix: thread one []vrow through move→followCursorWith(rows); longer term cache the visual model, invalidate on edit/resize. ## Acceptance Criteria - [ ] #1 at most one buildVisual per keystroke